<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 假设你是一名食品制造商，需要创建一个Food类来管理你的产品。这个类需要包括以下属性和方法：

  //   1. 属性：

  //   - name：食品名称
  //     - price：食品价格
  //       - ingredients：食品原料数组，存储每个原料的名称和重量

  //   1. 方法：

  //   - addIngredient(name, weight)：向食品原料数组中添加一种原料，参数为原料名称和重量
  //     - removeIngredient(name)：从食品原料数组中删除一种原料，参数为原料名称
  //       - calculateTotalWeight()：计算食品总重量，即所有原料的重量之和
  //         - toString()：返回食品的字符串表示，格式为“名称：xxx，价格：xxx，原料：xxx”

  //   请使用构造函数和原型来定义这个Food类，并创建两个实例对象来测试你的代码。其中一个实例对象需要使用addIngredient和removeIngredient方法来修改原料数组，另一个实例对象直接传入原料数组作为参数
  function food(name, price, ingredients) {
    this.name = name
    this.price = price
    this.ingredients = ingredients || []
  }
  food.prototype.addIngredient = function (name, weight) {
    this.ingredients.push({ name, weight })
  }
  food.prototype.removeIngredient = function (name) {
    this.ingredients = this.ingredients.filter(item => item.name != name)
  }
  food.prototype.calculateTotalWeight = function () {
    let total
    this.ingredients.forEach(item => {
      total += item.weight
      return total
    });
  }
  food.prototype.toString = function () {
    let str = '名称' + this.name.toString() + '价格' + this.price.toString() + '原料'
    let str1 = this.ingredients.map(item => {
      return item.name.toString() + '  ' + item.weight.toString() + 'g'
    }).join('/')
    return str + str1
  }
  var food1 = new food('汉堡', 20);
  food1.addIngredient('牛肉', 100);
  food1.addIngredient('面包', 50);
  food1.removeIngredient('面包');
  console.log(food1.toString());
  var food2 = new food('披萨', 30, [
    { name: '面粉', weight: 200 },
    { name: '芝士', weight: 50 },
    { name: '番茄酱', weight: 30 }
  ]);
  console.log(food2.toString())
</script>

</html>